package com.minimalist.common.entity.lindi.vo.subsidyapplication;

import cn.hutool.core.date.DatePattern;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.minimalist.common.config.mybatis.bo.PageReq;
import io.swagger.v3.oas.annotations.media.Schema;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.Objects;

/**
 * @author 11987
 */
@Schema(name = "林地指标交易平台_补贴申请查询实体")
public class LindiSubsidyApplicationQueryVO extends PageReq implements Serializable{
    @Serial
    private static final long serialVersionUID = 1L;

    @Schema(name = "enterpriseAccountId", description = "企业账号ID", type = "string")
    private Long enterpriseAccountId;

    @Schema(name = "projectName", description = "项目名称", type = "string")
    private String projectName;

    @Schema(name = "subsidyStatus", description = "补贴状态", type = "string")
    private String subsidyStatus;

    @Schema(name = "acceptDate", description = "验收时间", type = "string")
    @JsonFormat(pattern = DatePattern.NORM_DATETIME_PATTERN)
    private LocalDateTime acceptDate;

    @Schema(name = "startDate", description = "开始时间", type = "string")
    @JsonFormat(pattern = DatePattern.NORM_DATETIME_PATTERN)
    private LocalDateTime startDate;

    @Schema(name = "endDate", description = "结束时间", type = "string")
    @JsonFormat(pattern = DatePattern.NORM_DATETIME_PATTERN)
    private LocalDateTime endDate;

    // Constructors
    public LindiSubsidyApplicationQueryVO() {
        super();
    }

    public LindiSubsidyApplicationQueryVO(Long enterpriseAccountId, String projectName, String subsidyStatus, LocalDateTime acceptDate, LocalDateTime startDate, LocalDateTime endDate) {
        this.enterpriseAccountId = enterpriseAccountId;
        this.projectName = projectName;
        this.subsidyStatus = subsidyStatus;
        this.acceptDate = acceptDate;
        this.startDate = startDate;
        this.endDate = endDate;
    }

    // Getters and Setters
    public Long getEnterpriseAccountId() {
        return enterpriseAccountId;
    }

    public void setEnterpriseAccountId(Long enterpriseAccountId) {
        this.enterpriseAccountId = enterpriseAccountId;
    }

    public String getProjectName() {
        return projectName;
    }

    public void setProjectName(String projectName) {
        this.projectName = projectName;
    }

    public String getSubsidyStatus() {
        return subsidyStatus;
    }

    public void setSubsidyStatus(String subsidyStatus) {
        this.subsidyStatus = subsidyStatus;
    }

    public LocalDateTime getAcceptDate() {
        return acceptDate;
    }

    public void setAcceptDate(LocalDateTime acceptDate) {
        this.acceptDate = acceptDate;
    }

    public LocalDateTime getStartDate() {
        return startDate;
    }

    public void setStartDate(LocalDateTime startDate) {
        this.startDate = startDate;
    }

    public LocalDateTime getEndDate() {
        return endDate;
    }

    public void setEndDate(LocalDateTime endDate) {
        this.endDate = endDate;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        if (!super.equals(o)) return false;
        LindiSubsidyApplicationQueryVO that = (LindiSubsidyApplicationQueryVO) o;
        return Objects.equals(enterpriseAccountId, that.enterpriseAccountId) &&
               Objects.equals(projectName, that.projectName) &&
               Objects.equals(subsidyStatus, that.subsidyStatus) &&
               Objects.equals(acceptDate, that.acceptDate) &&
               Objects.equals(startDate, that.startDate) &&
               Objects.equals(endDate, that.endDate);
    }

    @Override
    public int hashCode() {
        return Objects.hash(super.hashCode(), enterpriseAccountId, projectName, subsidyStatus, acceptDate, startDate, endDate);
    }

    @Override
    public String toString() {
        return "LindiSubsidyApplicationQueryVO{" +
               "enterpriseAccountId=" + enterpriseAccountId +
               ", projectName='" + projectName + '\'' +
               ", subsidyStatus='" + subsidyStatus + '\'' +
               ", acceptDate=" + acceptDate +
               ", startDate=" + startDate +
               ", endDate=" + endDate +
               '}';
    }
}
